package com.example.CollaborativeDiscussionLearning.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.UUID;

@Component
public class EchartsUtil {
    //phantomjs执行器目录
    @Value("${echars.phantomJs}")
    private String phantomJs;

    //图片生成的临时文件目录
    @Value("${echars.fileDirectory}")
    private String fileDirectory;

    //echarts-convert执行目录
    @Value("${echars.jsPath}")
    private String jsPath;

    /**
     * @param options 报表数据源
     * @return 生成文件地址 返回图片生成的路径
     */
    public String generateEChart(String options){
        //随机生成图片文件名
        String wFileName= UUID.randomUUID().toString();
        //添加图片后缀
        String imageName=wFileName+".png";
        //写入文件
        String jsonPath=writeFile(options,wFileName);

        //生成的文件存储路径
        String imagePath=fileDirectory+imageName;
        try {
            //文件路径
            File file=new File(jsonPath);
            if(!file.exists()){
                File dir=new File(file.getParent());
                dir.mkdirs();
                file.createNewFile();
            }
            // 指令: 执行器路径 echarts-convert.js路径 -infile 数据源 -outfile 输出文件
            String EXEC_CMD = "{0} {1} -infile {2} -outfile {3}";
            String cmd= MessageFormat.format(EXEC_CMD,phantomJs,jsPath,jsonPath,imagePath);
            Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return imagePath;
    }


    /*
     * options：json数据
     * wFileName：文件输出路径
     * 生成phantomjs生成图片的数据文件
     * return .json文件全路径
     */
    private String writeFile(String options, String wFileName) {
        /*option写入文本文件 用于执行命令*/
        //得到一个json文件
        String wjsonPath=fileDirectory+wFileName+".json";
        BufferedWriter out=null;
        try {
            //根据给出的路径创建File
            File jsonFile=new File(wjsonPath);

            //判断是否存在
            if(!jsonFile.exists()){
                File dir=new File(jsonFile.getParent());
                dir.mkdirs();
                jsonFile.createNewFile();
            }

            out=new BufferedWriter(new FileWriter(jsonFile));
            out.write(options);
            //把缓存区内容压入文件
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try{
                if(out != null){
                    //关闭文件
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return  wjsonPath;
    }

}
